package dao

import (
	"time"
)

// 这是 Authority 的全局公开dao对象，被service层调用!
var AuthorityDao = authorityDao{}

// 权限表，常驻内存
// 这是 authority表 的实体类,这个实体类中的字段可以减少，但是不能在其基础上增加!
type Authority struct {
	Aid    int32     `json:"aid" form:"aid" db:"aid" v:"aid"`
	Name   string    `json:"name" form:"name" db:"name" v:"name"`             // 权限名
	Menu1  int8      `json:"menu1" form:"menu1" db:"menu1" v:"menu1"`         // 所属一级菜单，本身为一级菜单，则为0
	Menu2  int8      `json:"menu2" form:"menu2" db:"menu2" v:"menu2"`         // 所属二级菜单，本身为二级菜单，则为0
	Route  string    `json:"route" form:"route" db:"route" v:"route"`         // 路由(权限)
	OpUser string    `json:"op_user" form:"op_user" db:"op_user" v:"op_user"` // 操作人
	Ctime  time.Time `json:"ctime" form:"ctime" db:"ctime" v:"ctime"`
	Mtime  time.Time `json:"mtime" form:"mtime" db:"mtime" v:"mtime"`
}

// 注意:这是 Authority 的私有dao对象，只能在dao层内使用!
type authorityDao struct {
	InsertTemplate func(arg Authority) (int64, error) //插入一条记录
	UpdateTemplate func(arg Authority) (int64, error) //更新一条记录
	DeleteTemplate func(id int64) (int64, error)      `arg:"id"` //根据传入的主键删除一条记录
	SelectTemplate func(id int64) (Authority, error)  `arg:"id"` //根据传入的主键获取一条记录
	Find func() ([]Authority, error)                  //查找所有authority记录
	List func(arg AuthorityList) ([]Authority, error) //模糊分页查询
}

/*
// 这是 authority 表的Postman测试参数
// 该结构体中的字段就是: 前后端交互的json字段!
type AuthorityPostman struct {
aid
name
menu1
menu2
route
op_user
ctime
mtime

}*/

// 这是 authority 表的批量请求参数
type AuthorityReq struct {
	List []Authority `json:"list" form:"list"`
}

// 这是 authorityDao.List()方法的请求参数
type AuthorityList struct {
	Page
}
